home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / tools / utils / smc_tt1 / wd_asm.s < prev    next >
Text File  |  1995-11-25  |  3KB  |  115 lines

  1.     .super
  2.  
  3. ; Vektor Interrupt von LAN Karte
  4. ;-------------------------------------------------------
  5.       import    wd_interrupt
  6. vekt_new:        
  7.                 move.l        sp,stack_merk     ; sp sichern
  8.                 lea.l        new_stack,sp      ; auf freien speicher
  9.                 movem.l        d0-d7/a0-a6,-(sp) ; retten auf neuen Stack
  10.                 jsr            wd_interrupt      ; routine aktivieren
  11.                 movem.l        (sp)+,d0-d7/a0-a6 ; Register rein
  12.                 move.l        stack_merk,sp     ; alten sp restaurieren
  13. vekt_exit:        rte
  14.  
  15.  
  16. ; installieren in Vektor Slot
  17. ;----------------------------------------------------------
  18.      export     install_vekt
  19. install_vekt:   move.l  vekt_address,a0 ; Adresse des Ints
  20.                 move.l  (a0),vekt_merk
  21.                 move.l    #vekt_new,(a0)
  22.                 move.l  vekt_level,d0
  23.                 tst.l    d0              ; nur wenn Level angegeben
  24.                 beq.s   install_end
  25.                 bset.b  d0,$FF8E0D      ; Bit Nr = level- 0 ist unbelegt
  26. install_end:    rts
  27.  
  28. ; deinstallieren in Vektor Slot
  29. ;----------------------------------------------------------
  30.      export     deinstall_vekt
  31. deinstall_vekt: move.l  vekt_address,a0 ; Adresse des Ints
  32.                 move.l  vekt_merk,(a0)
  33.                 rts
  34.  
  35. ;------------------------------------------------------
  36. ; Kopieren mit movep Befehlen
  37. ;-------------------------------------------------------
  38. ; a0.l = Zieladresse (Peripherie)
  39. ; a1.l = quelladdresse
  40. ; d0.w = Zähler
  41.  
  42. export pwrite
  43. pwrite:    movem.l    d0/d1/a0/a1,-(sp)
  44.         lsr.w    #2,d0     ; d0/4
  45.         addq.w  #1,d0     ; ein wenig mehr
  46. pwrite_l:move.l  (a1)+,d1
  47.         movep.l d1,(a0) ; auf Peripherie moven
  48.         addq.l    #8,a0
  49.          dbra    d0,pwrite_l   ; Loop
  50.         movem.l    (sp)+,d0/d1/a0/a1
  51.         rts
  52.  
  53. ;------------------------------------------------------
  54. ; Zurückkopieren mit movep Befehlen
  55. ;-------------------------------------------------------
  56. ; a0.l = Zieladresse
  57. ; a1.l = quelladdresse (Peripherie)
  58. ; d0.w = Zähler
  59.  
  60. export pread
  61. pread:    movem.l    d0/d1/a0/a1,-(sp)
  62.         lsr.w    #2,d0     ; d0/4
  63.         addq.w  #1,d0     ; ein wenig mehr
  64. pread_l:movep.l (a1),d1   ; von Peripherie holen
  65.         move.l d1,(a0)+   ; auf Ziel moven
  66.         addq.l    #8,a1
  67.          dbra    d0,pread_l   ; Loop
  68.         movem.l    (sp)+,d0/d1/a0/a1
  69.         rts
  70.  
  71. ;------------------------------------------------------
  72. ; Zurückkopieren mit movep Befehlen
  73. ;-------------------------------------------------------
  74. ; a0.l = Zieladresse
  75. ; a1.l = quelladdresse (Peripherie)
  76. ; d0.w = Zähler
  77.  
  78. export pfcopy
  79. pfcopy:    movem.l    a0/a1/d0-d4,-(sp)
  80.         lsr.w    #4,d0     ; d0/4
  81.         addq.w  #1,d0     ; ein wenig mehr
  82. pfcopy_l:move.l  (a1)+,(a0)+
  83.         move.l  (a1)+,(a0)+
  84.         move.l  (a1)+,(a0)+
  85.         move.l  (a1)+,(a0)+
  86.          dbra    d0,pfcopy_l   ; Loop
  87.  
  88.         movem.l (sp)+,a0/a1/d0-d4
  89.         rts
  90.  
  91. ;------------------------------------------------------
  92. ; Zurückkopieren mit movep Befehlen
  93. ;-------------------------------------------------------
  94. ; a0.l = Zieladresse
  95. ; a1.l = quelladdresse (Peripherie)
  96. ; d0.w = Zähler
  97.  
  98. export pfwrite
  99. pfwrite:lsr.w    #2,d0     ; d0/4
  100.         addq.w  #1,d0     ; ein wenig mehr
  101. fwrite_l:move.l  (a1)+,(a0)+ ; von Peripherie holen
  102.          dbra    d0,fwrite_l   ; Loop
  103.         rts
  104.  
  105.     .bss
  106. vekt_merk:        ds.l    1
  107. stack_merk:     ds.l    1
  108.    export vekt_address
  109. vekt_address:   ds.l    1
  110.    export vekt_level
  111. vekt_level:     ds.l    1
  112.  
  113.                 ds.l    4096
  114. new_stack:      ds.l    1
  115.